package com.fwmagic.spark.core

import org.apache.spark.sql.SparkSession

/**
  * Spark的常用action算子
  */
object ActionOperation {

  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession
      .builder()
      .appName("ActionOperation")
      .master("local[*]")
      //.config("spark.sql.warehouse.dir", "/Users/fangwei/learn/mycode/workspace/spark-warehouse")
      .getOrCreate()

    import spark.implicits._

    //读取json文件
    val employee = spark.read.json("/Users/fangwei/learn/mycode/workspace/fwmagic-spark/src/main/resources/employee.json")

    //collect:将分布式存储在集群中的分布式数据集（比如dataset）中的所有数据收集获取到Driver端来
    employee.collect().foreach(println(_))

    //count：对dataset中的记录数进行个数统计
    println(employee.count())

    //first:获取数据集中的第一条记录
    println(employee.first())

    //foreach:遍历数据集中的每一条记录，对数据进行操作，和collect不用，foreach是将计算操作推到集群中去运行
    employee.foreach(println(_))

    //reduce:对数据进行规约操作，将多条变成一条
    println(employee.map(employee => 1).reduce(_+_))

    //show,默认打印dataset前20条
    employee.show()

    //take:从数据集中获取指定条数
    employee.take(3).foreach(println(_))

    spark.stop()
    
  }

}
